Хорошо писать прикладные программы для MSWord - вставил куда-либо поле {AUTOR} и получил информацию о том, кто автор документа (иногда, правда, это делать опасно - всплывают прелюбопытные подробности). А в других программах MSOffice? Сколько, например символов в таблице Excel? Так просто не получится... :-(
Для этой задачи может помочь коллекция BuiltInDocumentProperties. В MSOffice97 определено 30 (а не 28, как в документации) свойств, названия которых приведены в таблице. Все эти свойства могут быть прочитаны в любом документе MSOffice, вне зависимости от того, какая программа документ породила. Кроме чтения программным путем, MSWord (это уже упоминалось выше) позволяет вывести значение свойств документа в сам документ при помощи полей, но это к программированию на прямую не относится.
| Название свойства | Назначение | |
| 1 | Title | Заголовок |
| 2 | Subject | Предмет |
| 3 | Author | Автор (создавший документ) |
| 4 | Keywords | Ключевые слова |
| 5 | Comments | Комментарии |
| 6 | Template | Шаблон документа |
| 7 | Last Author | Тот, кто последний сохранил документ |
| 8 | Revision Number | Число входов для редактирования |
| 9 | Application Name | Название приложения, обрабатывающего документ |
| 10 | Last Print Date | Дата и время последней печати |
| 11 | Creation Date | Дата создания |
| 12 | Last Save Time | Дата и время последнего сохранения |
| 13 | Total Editing Time | Общая продолжительность редактирования (минуты) |
| 14 | Number of Pages | Число страниц |
| 15 | Number of Words | Число слов |
| 16 | Number of Characters | Число символов |
| 17 | Security | Секретность |
| 18 | Category | Категория |
| 19 | Format | Формат |
| 20 | Manager | Менеджер |
| 21 | Company | Компания |
| 22 | Number of Bytes | Размер файла в байтах в момент последнего сохранения |
| 23 | Number of Lines | Число строк |
| 24 | Number of Paragraphs | Число абзацев |
| 25 | Number of Slides | Число слайдов (определено в PowerPoint, в остальных, вероятно, не используется) |
| 26 | Number of Notes | Число заметок к слайдам (определено в PowerPoint, в остальных, вероятно, не используется) |
| 27 | Number of Hidden Slides | Число скрытых слайдов (определено в PowerPoint, в остальных, вероятно, не используется) |
| 28 | Number of Multimedia Clips | Число клипов (определено в PowerPoint, в остальных, вероятно, не используется) |
| 29 | Hyperlink Base | База гиперссылок |
| 30 | Number of Characters (with spaces) | Общеечисло символов, включая пробелы |
Стоит иметь в виду, что при обращении к значению свойства, которое для данного документа не определено, также возникает ошибка выполнения с кодом -2147467259 (знак минус!), что требует аккуратной работы (см. примеры обработчиков ошибок в предыдущем шаге). Также приводит к ошибке попытка записи в свойство, которое данным приложением не поддерживается, что можно установить методом проб и ошибок. Но имена выводятся для всех свойств правильно. Практически полезной может оказаться такая процедура:
Sub test() On Error GoTo NotDefined ' В следующей стороке ActiveDocument стоит заменть на ActiveWorkbook, etc For Each prop In ActiveDocument.BuiltInDocumentProperties With prop PName = .Name PValue = .Value PType = .Type Debug.Print PName & " = " & PValue & " [" & PType & "]" End With Next Exit Sub ' ОБРАБОТЧИК ОШИБОК NotDefined: PValue = "Value not defined" Resume Next End Sub
Ее польза в том, что можно исследовать, какие свойства определены для данного типа документов, не появились ли новые свойства с выходом новой версии MSOffice (и не потерялись ли старые :-) ), какие у них типы. Тип выводится в виде целого числа. Результат ее работы (копия Debug Window):
Title = Свойства документов MSOffice [4] Subject = [4] Author = DD [4] Keywords = [4] Comments = [4] Template = Normal [4] Last author = DD [4] Revision number = 4 [4] Application name = Microsoft Word 8.0 [4] Last print date = Value not defined [3] Creation date = 17.03.00 14:13:00 [3] Last save time = 17.03.00 15:06:00 [3] Total editing time = 67 [1] Number of pages = 3 [1] Number of words = 1183 [1] Number of characters = 7702 [1] Security = 0 [1] Category = [4] Format = [4] Manager = [4] Company = SBC [4] Number of bytes = 45056 [1] Number of lines = 235 [1] Number of paragraphs = 161 [1] Number of slides = Value not defined [1] Number of notes = Value not defined [1] Number of hidden Slides = Value not defined [1] Number of multimedia clips = Value not defined [1] Hyperlink base = [4] Number of characters (with spaces) = 8995 [1]
Соответствие числа и предопределенных констант типов - ниже:
1 msoPropertyTypeNumber 2 msoPropertyTypeBoolean 3 msoPropertyTypeDate 4 msoPropertyTypeString 5 msoPropertyTypeFloat
Свойства, недоступные в данном приложении, будут иметь вид: Number of slides = Value not defined [1]
Написал и прислал шаг Dmitri Drozdov.